home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / m107.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  18KB  |  543 lines

  1. /*******************************************************************************
  2.  
  3.     Irem M107 games:
  4.  
  5.     Fire Barrel                             (c) 1993 Irem Corporation
  6.     Dream Soccer '94                        (c) 1994 Data East Corporation
  7.  
  8.  
  9.     Fire Barrel sprite indexes are wrong - encryption?  There are two
  10.     unused roms next to the sprite roms.
  11.     Graphics glitches in both games too.
  12.  
  13.     Emulation by Bryan McPhail, mish@tendril.co.uk
  14.  
  15. *******************************************************************************/
  16.  
  17. #include "driver.h"
  18. #include "vidhrdw/generic.h"
  19. #include "m92.h"
  20.  
  21. extern unsigned char *m107_vram_data;
  22. static unsigned char *m107_ram;
  23. static int m107_irq_vectorbase,m107_vblank,raster_enable;
  24. extern int m107_raster_irq_position,m107_sprite_list;
  25.  
  26. #define m107_IRQ_0 ((m107_irq_vectorbase+0)/4) /* VBL interrupt*/
  27. #define m107_IRQ_1 ((m107_irq_vectorbase+4)/4) /* ??? */
  28. #define m107_IRQ_2 ((m107_irq_vectorbase+8)/4) /* Raster interrupt */
  29. #define m107_IRQ_3 ((m107_irq_vectorbase+12)/4) /* ??? */
  30.  
  31. WRITE_HANDLER( m107_spritebuffer_w );
  32. void m107_vh_raster_partial_refresh(struct osd_bitmap *bitmap,int start_line,int end_line);
  33. void m107_screenrefresh(struct osd_bitmap *bitmap,const struct rectangle *clip);
  34. void m107_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  35. void dsoccr_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  36. void m107_vh_stop(void);
  37. int m107_vh_start(void);
  38. WRITE_HANDLER( m107_control_w );
  39. WRITE_HANDLER( m107_vram_w );
  40. READ_HANDLER( m107_vram_r );
  41.  
  42. /*****************************************************************************/
  43.  
  44. static WRITE_HANDLER( bankswitch_w )
  45. {
  46.     unsigned char *RAM = memory_region(REGION_CPU1);
  47.  
  48.     if (offset==1) return; /* Unused top byte */
  49.     cpu_setbank(1,&RAM[0x100000 + ((data&0x7)*0x10000)]);
  50. }
  51.  
  52. static READ_HANDLER( m107_port_4_r )
  53. {
  54.     if (m107_vblank) return readinputport(4) | 0;
  55.     return readinputport(4) | 0x80;
  56. }
  57.  
  58. static WRITE_HANDLER( m107_soundlatch_w )
  59. {
  60.     if (offset==0) soundlatch_w(0,data);
  61.     /* Interrupt second V30 */
  62. }
  63.  
  64. static WRITE_HANDLER( m107_coincounter_w )
  65. {
  66.     if (offset==0) {
  67.         coin_counter_w(0,data & 0x01);
  68.         coin_counter_w(1,data & 0x02);
  69.     }
  70. }
  71.  
  72. /*****************************************************************************/
  73.  
  74. static struct MemoryReadAddress readmem[] =
  75. {
  76.     { 0x00000, 0x9ffff, MRA_ROM },
  77.     { 0xa0000, 0xbffff, MRA_BANK1 },
  78.     { 0xd0000, 0xdffff, m107_vram_r },
  79.     { 0xe0000, 0xeffff, MRA_RAM },
  80.     { 0xf8000, 0xf8fff, MRA_RAM },
  81.     { 0xf9000, 0xf9fff, paletteram_r },
  82.     { 0xffff0, 0xfffff, MRA_ROM },
  83.     { -1 }    /* end of table */
  84. };
  85.  
  86. static struct MemoryWriteAddress writemem[] =
  87. {
  88.     { 0x00000, 0xbffff, MWA_ROM },
  89.     { 0xd0000, 0xdffff, m107_vram_w, &m107_vram_data },
  90.     { 0xe0000, 0xeffff, MWA_RAM, &m107_ram }, /* System ram */
  91.     { 0xf8000, 0xf8fff, MWA_RAM, &spriteram },
  92.     { 0xf9000, 0xf9fff, paletteram_xBBBBBGGGGGRRRRR_w, &paletteram },
  93.     { 0xffff0, 0xfffff, MWA_ROM },
  94.     { -1 }    /* end of table */
  95. };
  96.  
  97. static struct IOReadPort readport[] =
  98. {
  99.     { 0x00, 0x00, input_port_0_r }, /* Player 1 */
  100.     { 0x01, 0x01, input_port_1_r }, /* Player 2 */
  101.     { 0x02, 0x02, m107_port_4_r }, /* Coins */
  102.     { 0x03, 0x03, input_port_7_r }, /* Dip 3 */
  103.     { 0x04, 0x04, input_port_6_r }, /* Dip 2 */
  104.     { 0x05, 0x05, input_port_5_r }, /* Dip 1 */
  105.     { 0x06, 0x06, input_port_2_r }, /* Player 3 */
  106.     { 0x07, 0x07, input_port_3_r }, /* Player 4 */
  107.     { -1 }    /* end of table */
  108. };
  109.  
  110. static struct IOWritePort writeport[] =
  111. {
  112.     { 0x00, 0x01, m107_soundlatch_w },
  113.     { 0x02, 0x03, m107_coincounter_w },
  114.     { 0x06, 0x07, bankswitch_w },
  115.     { 0x80, 0x9f, m107_control_w },
  116.     { 0xa0, 0xaf, MWA_NOP }, /* Written with 0's in interrupt */
  117.     { 0xb0, 0xb1, m107_spritebuffer_w },
  118.     { -1 }    /* end of table */
  119. };
  120.  
  121. /******************************************************************************/
  122.  
  123. #if 0
  124. static struct MemoryReadAddress sound_readmem[] =
  125. {
  126.     { 0x00000, 0x1ffff, MRA_ROM },
  127.     { 0xffff0, 0xfffff, MRA_ROM },
  128.     { -1 }    /* end of table */
  129. };
  130.  
  131. static struct MemoryWriteAddress sound_writemem[] =
  132. {
  133.     { 0x00000, 0x1ffff, MWA_ROM },
  134.     { 0xffff0, 0xfffff, MWA_ROM },
  135.     { -1 }    /* end of table */
  136. };
  137. #endif
  138.  
  139. /******************************************************************************/
  140.  
  141. INPUT_PORTS_START( firebarr )
  142.     PORT_PLAYER1_2BUTTON_JOYSTICK
  143.     PORT_PLAYER2_2BUTTON_JOYSTICK
  144.     PORT_UNUSED
  145.     PORT_UNUSED
  146.     PORT_COINS_VBLANK
  147.     PORT_SYSTEM_DIPSWITCH
  148.  
  149.     PORT_START
  150.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
  151.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  152.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  153.     PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
  154.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  155.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  156.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
  157.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  158.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  159.     PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
  160.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  161.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  162.     PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
  163.     PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
  164.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  165.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
  166.     PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
  167.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  168.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
  169.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  170.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  171.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  172.  
  173.     PORT_START
  174.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
  175.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  176.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  177.     PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
  178.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  179.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  180.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
  181.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  182.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  183.     PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
  184.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  185.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  186.     PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
  187.     PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
  188.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  189.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
  190.     PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
  191.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  192.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
  193.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  194.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  195.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
  196.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  197.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  198. INPUT_PORTS_END
  199.  
  200. INPUT_PORTS_START( dsoccr94 )
  201.     PORT_PLAYER1_2BUTTON_JOYSTICK
  202.     PORT_PLAYER2_2BUTTON_JOYSTICK
  203.     PORT_PLAYER3_2BUTTON_JOYSTICK
  204.     PORT_PLAYER4_2BUTTON_JOYSTICK
  205.     PORT_COINS_VBLANK
  206.     PORT_SYSTEM_DIPSWITCH
  207.  
  208.     PORT_START
  209.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
  210.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  211.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  212.     PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
  213.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  214.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  215.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
  216.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  217.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  218.     PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
  219.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  220.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  221.     PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
  222.     PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
  223.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  224.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
  225.     PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
  226.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  227.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
  228.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  229.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  230.     PORT_SERVICE( 0x80, IP_ACTIVE_LOW )
  231.  
  232.     PORT_START
  233.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
  234.     PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
  235.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  236.     PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
  237.     PORT_DIPSETTING(    0x02, DEF_STR( Off ) )
  238.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  239.     PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
  240.     PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
  241.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  242.     PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
  243.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  244.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  245.     PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
  246.     PORT_DIPSETTING(    0x10, DEF_STR( Off ) )
  247.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  248.     PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
  249.     PORT_DIPSETTING(    0x20, DEF_STR( Off ) )
  250.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  251.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
  252.     PORT_DIPSETTING(    0x40, DEF_STR( Off ) )
  253.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  254.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
  255.     PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
  256.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  257. INPUT_PORTS_END
  258.  
  259. /***************************************************************************/
  260.  
  261. static struct GfxLayout charlayout =
  262. {
  263.     8,8,
  264.     0x20000,
  265.     4,
  266.     { 8, 0, 24, 16 },
  267.     { 0, 1, 2, 3, 4, 5, 6, 7 },
  268.     { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
  269.     32*8
  270. };
  271.  
  272. static struct GfxLayout spritelayout =
  273. {
  274.     16,16,
  275.     0x8000,
  276.     4,
  277.     { 0x300000*8, 0x200000*8, 0x100000*8, 0x000000*8 },
  278.     { 0, 1, 2, 3, 4, 5, 6, 7,
  279.         16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7 },
  280.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  281.             8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8 },
  282.     32*8
  283. };
  284.  
  285. static struct GfxLayout spritelayout2 =
  286. {
  287.     16,16,
  288.     0x8000,
  289.     4,
  290.     { 0x300000*8, 0x200000*8, 0x100000*8, 0x000000*8 },
  291.     { 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 2, 3, 4, 5, 6, 7 },
  292.     { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
  293.             8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
  294.     32*8
  295. };
  296.  
  297. static struct GfxDecodeInfo gfxdecodeinfo[] =
  298. {
  299.     { REGION_GFX1, 0, &charlayout,   0, 128 },
  300.     { REGION_GFX2, 0, &spritelayout, 0, 128 },
  301.     { -1 } /* end of array */
  302. };
  303.  
  304. static struct GfxDecodeInfo firebarr_gfxdecodeinfo[] =
  305. {
  306.     { REGION_GFX1, 0, &charlayout,   0, 128 },
  307.     { REGION_GFX2, 0, &spritelayout2,0, 128 },
  308.     { -1 } /* end of array */
  309. };
  310.  
  311. /***************************************************************************/
  312.  
  313. static int m107_interrupt(void)
  314. {
  315.     m107_vblank=0;
  316.     m107_vh_raster_partial_refresh(Machine->scrbitmap,0,248);
  317.  
  318.     return m107_IRQ_0; /* VBL */
  319. }
  320.  
  321. static int m107_raster_interrupt(void)
  322. {
  323.     static int last_line=0;
  324.     int line = 256 - cpu_getiloops();
  325.  
  326.     if (keyboard_pressed_memory(KEYCODE_F1)) {
  327.         raster_enable ^= 1;
  328.         if (raster_enable)
  329.             usrintf_showmessage("Raster IRQ enabled");
  330.         else
  331.             usrintf_showmessage("Raster IRQ disabled");
  332.     }
  333.  
  334.     /* Raster interrupt */
  335.     if (raster_enable && line==m107_raster_irq_position) {
  336.         if (osd_skip_this_frame()==0)
  337.             m107_vh_raster_partial_refresh(Machine->scrbitmap,last_line,line);
  338.         last_line=line+1;
  339.  
  340.         return m107_IRQ_2;
  341.     }
  342.  
  343.     /* Kludge to get Fire Barrel running */
  344.     if (line==118)
  345.         return m107_IRQ_3;
  346.  
  347.     /* Redraw screen, then set vblank and trigger the VBL interrupt */
  348.     if (line==248) {
  349.         if (osd_skip_this_frame()==0)
  350.             m107_vh_raster_partial_refresh(Machine->scrbitmap,last_line,248);
  351.         last_line=0;
  352.         m107_vblank=1;
  353.         return m107_IRQ_0;
  354.     }
  355.  
  356.     /* End of vblank */
  357.     if (line==255)
  358.         m107_vblank=0;
  359.  
  360.     return 0;
  361. }
  362.  
  363. static struct MachineDriver machine_driver_firebarr =
  364. {
  365.     /* basic machine hardware */
  366.     {
  367.         {
  368.             CPU_V33,    /* NEC V33 */
  369.             28000000,    /* 28MHz clock */
  370.             readmem,writemem,readport,writeport,
  371.             m107_raster_interrupt,256 /* 8 prelines, 240 visible lines, 8 for vblank? */
  372.         },
  373. #if 0
  374.         {
  375.             CPU_V33 | CPU_AUDIO_CPU,
  376.             14318000,    /* 14.318 Mhz */
  377.             sound_readmem,sound_writemem,0,0,
  378.             ignore_interrupt,0
  379.         }
  380. #endif
  381.     },
  382.     60, DEFAULT_60HZ_VBLANK_DURATION,    /* frames per second, vblank duration */
  383.     1,    /* 1 CPU slice per frame - interleaving is forced when a sound command is written */
  384.     0,
  385.  
  386.     /* video hardware */
  387.     512, 512, { 80, 511-112, 128+8, 511-128-8 }, /* 320 x 240 */
  388.  
  389.     firebarr_gfxdecodeinfo,
  390.     2048,2048,
  391.     0,
  392.  
  393.     VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,
  394.     0,
  395.     m107_vh_start,
  396.     m107_vh_stop,
  397.     m107_vh_screenrefresh,
  398.  
  399.     /* sound hardware */
  400.     SOUND_SUPPORTS_STEREO,0,0,0,
  401. };
  402.  
  403. static struct MachineDriver machine_driver_dsoccr94 =
  404. {
  405.     /* basic machine hardware */
  406.     {
  407.         {
  408.             CPU_V33,    /* NEC V33 */
  409.             20000000,    /* Could be 28MHz clock? */
  410.             readmem,writemem,readport,writeport,
  411.             m107_interrupt,1
  412.         },
  413. #if 0
  414.         {
  415.             CPU_V33 | CPU_AUDIO_CPU,
  416.             14318000,    /* 14.318 Mhz */
  417.             sound_readmem,sound_writemem,0,0,
  418.             ignore_interrupt,0
  419.         }
  420. #endif
  421.     },
  422.     60, DEFAULT_60HZ_VBLANK_DURATION,    /* frames per second, vblank duration */
  423.     1,    /* 1 CPU slice per frame - interleaving is forced when a sound command is written */
  424.     0,
  425.  
  426.     /* video hardware */
  427.     512, 512, { 80, 511-112, 128+8, 511-128-8 }, /* 320 x 240 */
  428.  
  429.     gfxdecodeinfo,
  430.     2048,2048,
  431.     0,
  432.  
  433.     VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,
  434.     0,
  435.     m107_vh_start,
  436.     m107_vh_stop,
  437.     m107_vh_screenrefresh,
  438.  
  439.     /* sound hardware */
  440.     SOUND_SUPPORTS_STEREO,0,0,0,
  441. };
  442.  
  443. /***************************************************************************/
  444.  
  445. ROM_START( firebarr )
  446.     ROM_REGION( 0x100000, REGION_CPU1 )
  447.     ROM_LOAD_V20_EVEN( "f4-h0",  0x000000, 0x40000, 0x2aa5676e )
  448.     ROM_LOAD_V20_ODD ( "f4-l0",  0x000000, 0x40000, 0x42f75d59 )
  449.     ROM_LOAD_V20_EVEN( "f4-h1",  0x080000, 0x20000, 0xbb7f6968 )
  450.     ROM_LOAD_V20_ODD ( "f4-l1",  0x080000, 0x20000, 0x9d57edd6 )
  451.  
  452.     ROM_REGION( 0x100000, REGION_CPU2 )
  453.     ROM_LOAD_V20_EVEN( "f4-sh0", 0x000000, 0x10000, 0x30a8e232 )
  454.     ROM_LOAD_V20_ODD ( "f4-sl0", 0x000000, 0x10000, 0x204b5f1f )
  455.  
  456.     ROM_REGION( 0x400000, REGION_GFX1 | REGIONFLAG_DISPOSE )    /* chars */
  457.     ROM_LOAD_GFX_EVEN( "f4-c00", 0x000000, 0x80000, 0x50cab384 )
  458.     ROM_LOAD_GFX_ODD ( "f4-c10", 0x000000, 0x80000, 0x330c6df2 )
  459.     ROM_LOAD_GFX_EVEN( "f4-c01", 0x100000, 0x80000, 0x12a698c8 )
  460.     ROM_LOAD_GFX_ODD ( "f4-c11", 0x100000, 0x80000, 0x3f9add18 )
  461.  
  462.     ROM_REGION( 0x400000, REGION_GFX2 | REGIONFLAG_DISPOSE )    /* sprites */
  463.     ROM_LOAD_GFX_EVEN( "f4-000", 0x000000, 0x80000, 0x920deee9 )
  464.     ROM_LOAD_GFX_ODD ( "f4-001", 0x000000, 0x80000, 0xe5725eaf )
  465.     ROM_LOAD_GFX_EVEN( "f4-010", 0x100000, 0x80000, 0x3505d185 )
  466.     ROM_LOAD_GFX_ODD ( "f4-011", 0x100000, 0x80000, 0x1912682f )
  467.     ROM_LOAD_GFX_EVEN( "f4-020", 0x200000, 0x80000, 0xec130b8e )
  468.     ROM_LOAD_GFX_ODD ( "f4-021", 0x200000, 0x80000, 0x8dd384dc )
  469.     ROM_LOAD_GFX_EVEN( "f4-030", 0x300000, 0x80000, 0x7e7b30cd )
  470.     ROM_LOAD_GFX_ODD ( "f4-031", 0x300000, 0x80000, 0x83ac56c5 )
  471.  
  472.     ROM_REGION( 0x80000, REGION_SOUND1 )     /* ADPCM samples */
  473.     ROM_LOAD( "f4-da0",          0x000000, 0x80000, 0x7a493e2e )
  474.  
  475.     ROM_REGION( 0x40000, REGION_USER1 ) /* Sprite protection?! */
  476.     ROM_LOAD_EVEN( "f4-drh",     0x000000, 0x20000, 0x12001372 ) /* Hmm?? extra sprites? */
  477.     ROM_LOAD_ODD ( "f4-drl",     0x000000, 0x20000, 0x08cb7533 ) /* Hmm?? */
  478. ROM_END
  479.  
  480. ROM_START( dsoccr94 )
  481.     ROM_REGION( 0x180000, REGION_CPU1 ) /* v30 main cpu */
  482.     ROM_LOAD_V20_EVEN("ds_h0-c.rom",  0x000000, 0x040000, 0xd01d3fd7 )
  483.     ROM_LOAD_V20_ODD ("ds_l0-c.rom",  0x000000, 0x040000, 0x8af0afe2 )
  484.     ROM_LOAD_V20_EVEN("ds_h1-c.rom",  0x100000, 0x040000, 0x6109041b )
  485.     ROM_LOAD_V20_ODD ("ds_l1-c.rom",  0x100000, 0x040000, 0x97a01f6b )
  486.  
  487.     ROM_REGION( 0x100000, REGION_CPU2 )
  488.     ROM_LOAD_V20_EVEN("ds_sh0.rom",   0x000000, 0x010000, 0x23fe6ffc )
  489.     ROM_LOAD_V20_ODD ("ds_sl0.rom",   0x000000, 0x010000, 0x768132e5 )
  490.  
  491.     ROM_REGION( 0x400000, REGION_GFX1 | REGIONFLAG_DISPOSE )    /* chars */
  492.     ROM_LOAD_GFX_EVEN("ds_c00.rom",   0x000000, 0x100000, 0x2d31d418 )
  493.     ROM_LOAD_GFX_ODD ("ds_c10.rom",   0x000000, 0x100000, 0x57f7bcd3 )
  494.     ROM_LOAD_GFX_EVEN("ds_c01.rom",   0x200000, 0x100000, 0x9d31a464 )
  495.     ROM_LOAD_GFX_ODD ("ds_c11.rom",   0x200000, 0x100000, 0xa372e79f )
  496.  
  497.     ROM_REGION( 0x400000, REGION_GFX2 | REGIONFLAG_DISPOSE )    /* sprites */
  498.     ROM_LOAD(         "ds_000.rom",   0x000000, 0x100000, 0x366b3e29 )
  499.     ROM_LOAD(         "ds_010.rom",   0x100000, 0x100000, 0x28a4cc40 )
  500.     ROM_LOAD(         "ds_020.rom",   0x200000, 0x100000, 0x5a310f7f )
  501.     ROM_LOAD(         "ds_030.rom",   0x300000, 0x100000, 0x328b1f45 )
  502.  
  503.     ROM_REGION( 0x100000, REGION_SOUND1 )     /* ADPCM samples */
  504.     ROM_LOAD(         "ds_da0.rom" ,  0x000000, 0x100000, 0x67fc52fd )
  505. ROM_END
  506.  
  507. /***************************************************************************/
  508.  
  509. static void init_m107(void)
  510. {
  511.     unsigned char *RAM = memory_region(REGION_CPU1);
  512.  
  513.     memcpy(RAM+0xffff0,RAM+0x7fff0,0x10); /* Start vector */
  514.     cpu_setbank(1,&RAM[0xa0000]); /* Initial bank */
  515.  
  516.     RAM = memory_region(REGION_CPU2);
  517.     memcpy(RAM+0xffff0,RAM+0x1fff0,0x10); /* Sound cpu Start vector */
  518.  
  519.     m107_irq_vectorbase=0x20;
  520.     raster_enable=1;
  521. }
  522.  
  523. static void init_dsoccr94(void)
  524. {
  525.     unsigned char *RAM = memory_region(REGION_CPU1);
  526.  
  527.     memcpy(RAM+0xffff0,RAM+0x7fff0,0x10); /* Start vector */
  528.     cpu_setbank(1,&RAM[0xa0000]); /* Initial bank */
  529.  
  530.     RAM = memory_region(REGION_CPU2);
  531.     memcpy(RAM+0xffff0,RAM+0x1fff0,0x10); /* Sound cpu Start vector */
  532.  
  533.     m107_irq_vectorbase=0x80;
  534.  
  535.     /* This game doesn't use raster IRQ's */
  536.     raster_enable=0;
  537. }
  538.  
  539. /***************************************************************************/
  540.  
  541. GAMEX( 1993, firebarr, 0, firebarr, firebarr, m107,     ROT270, "Irem", "Fire Barrel (Japan)", GAME_NO_SOUND | GAME_NOT_WORKING )
  542. GAMEX( 1994, dsoccr94, 0, dsoccr94, dsoccr94, dsoccr94, ROT0, "Irem (Data East Corporation license)", "Dream Soccer '94", GAME_NO_SOUND )
  543.